package com.si3.servicio;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.HibernateException;

import com.si3.jpa.ControlJPA;
import com.si3.modelo.EstadoProyecto;
import com.si3.modelo.ObjetoAnio;
import com.si3.modelo.PaginaInfo;
import com.si3.modelo.Profesor;
import com.si3.modelo.Propuesta;
import com.si3.modelo.Proyecto;
import com.si3.modelo.Solicitud;


public class ProyectosService
{
   
	public boolean addNewPropuesta(Proyecto proyecto)
	{
	
	  boolean correcto=true;
	  try
	  {
	      System.out.println("[addNewPropuesta] Proyecto que se va a insertar:");
	      ControlJPA.getInstancia().almacenaEntidad(proyecto);
	  }
	  catch (HibernateException he)
	  {
	      correcto=false;
	  }
	  finally
	  {
	      return correcto;
	  }
	}
	

	  
	public List<ObjetoAnio> getAnios(EstadoProyecto aEstadoProyecto)
	  {
		 List<Integer> anios=null; 
		 List<ObjetoAnio> objetosanio=null;
		 switch (aEstadoProyecto)
		 {
			 case DESARROLLO:
			   {
			     anios = ControlJPA.getInstancia().getAniosPFCsInicio(Proyecto.class);
			     break;		   
			   }
			 case CERRADO:
			   {
			     anios = ControlJPA.getInstancia().getAniosPFCsFinal(Proyecto.class);
			     break;		   
			   }
		 }
		
		 if (anios!=null)
		 {
		   objetosanio = new ArrayList<ObjetoAnio>(anios.size()); 
		   for (Integer i : anios) 
		   { 
			  objetosanio.add(new ObjetoAnio(String.valueOf(i))); 
		   }
		 }		
		 return objetosanio;		  
	  }
	 

   
   public int getCountProfesor(int anio, Profesor profesor,EstadoProyecto aEstadoProyecto)
   {
	   	ArrayList campos= new ArrayList();
		ArrayList valores= new ArrayList();
		campos.add("director.dni");
		valores.add(profesor.getDni()); 
		int rowcount=0;
		 switch (aEstadoProyecto)
		 {
			 case DESARROLLO:
			   {
				 campos.add("anyo_inicio");
				 valores.add(new Integer(anio)); 
				 rowcount = ControlJPA.getInstancia().getCountEntidades(Proyecto.class, campos,valores);   
		
			     break;		   
			   }
			 case CERRADO:
			   {
				 campos.add("anyo_finalizacion");
				 valores.add(new Integer(anio)); 
				 rowcount = ControlJPA.getInstancia().getCountEntidades(Proyecto.class, campos,valores);   
			     break;		   
			   }
		 } 	
	   	   	
	   	return rowcount;
   }
   
   
   public int getCount(int anio,EstadoProyecto aEstadoProyecto)
   {
     int rowcount=0;
	 ArrayList campos= new ArrayList();
	 ArrayList valores= new ArrayList();
	 switch (aEstadoProyecto)
	 {
		 case DESARROLLO:
		   {
			 campos.add("anyo_inicio");
			 valores.add(new Integer(anio)); 
			 campos.add("estadoPfc");
			 valores.add(aEstadoProyecto); 			 
			 rowcount = ControlJPA.getInstancia().getCountEntidades(Proyecto.class, campos,valores);   
	
		     break;		   
		   }
		 case CERRADO:
		   {
			 campos.add("anyo_finalizacion");
			 valores.add(new Integer(anio)); 
			 campos.add("estadoPfc");
			 valores.add(aEstadoProyecto); 
			 rowcount = ControlJPA.getInstancia().getCountEntidades(Proyecto.class, campos,valores);   
		     break;		   
		   }
	 }
     return rowcount;
   }
  
   public Proyecto getProyecto(int codigoPFC)
   {
	   Proyecto proyecto=null; 
	   proyecto=(Proyecto) ControlJPA.getInstancia().getEntidad(codigoPFC, Proyecto.class);
	   return proyecto;
   }
   
  public List<Proyecto>  getProyectos(int anio,EstadoProyecto aEstadoProyecto,PaginaInfo paginainfo)
  {
   	 List <Proyecto> lista = null;
	 ArrayList campos= new ArrayList();
	 ArrayList valores= new ArrayList();
	 switch (aEstadoProyecto)
	 {
		 case DESARROLLO:
		   {
			 campos.add("anyo_inicio");
			 valores.add(new Integer(anio)); 
			 campos.add("estadoPfc");
			 valores.add(aEstadoProyecto); 
			 lista=ControlJPA.getInstancia().getListaEntidadesPaginadas(Proyecto.class,campos,
                      valores,paginainfo);
		     break;		   
		   }
		 case CERRADO:
		   {
			  campos.add("anyo_finalizacion");
			  valores.add(new Integer(anio)); 
			  campos.add("estadoPfc");
			  valores.add(aEstadoProyecto); 
			  lista=ControlJPA.getInstancia().getListaEntidadesPaginadas(Proyecto.class,campos,
                                              valores,paginainfo);
			  break;		   
		   }
	 }   
    return lista;
  }

   public List<Proyecto> getProyectosProfesor(int anio, Profesor profesor,
		                                       EstadoProyecto aEstadoProyecto,PaginaInfo paginainfo)
   {  
	  List <Proyecto> lista = null;
	  ArrayList campos= new ArrayList();
	  ArrayList valores= new ArrayList();
	  campos.add("director.dni");
	  valores.add(profesor.getDni()); 
	  switch (aEstadoProyecto)
	  {
			 case DESARROLLO:
			   {
				 campos.add("anyo_inicio");
			     valores.add(new Integer(anio)); 
				 lista=ControlJPA.getInstancia().getListaEntidadesPaginadas(Proyecto.class,campos,
                          valores,paginainfo);
			     break;		   
			   }
			 case CERRADO:
			   {
				  campos.add("anyo_finalizacion");
				  valores.add(new Integer(anio)); 
				  lista=ControlJPA.getInstancia().getListaEntidadesPaginadas(Proyecto.class,campos,
	                                              valores,paginainfo);
				  break;		   
			   }
	   }   			                                                                   
       return lista;
   }

public boolean cerrarProyecto(Proyecto proyecto, String ficheroMemoria,String ficheroCodigo)
{

  boolean correcto=true;
  try
  {
      System.out.println("[cerrarProyecto] Proyecto que se va a cerrar:");
      //proyecto.setCalificacion(nota);
      proyecto.setMemoria(ficheroMemoria);
      proyecto.setCodigoComprimido(ficheroCodigo);
      ControlJPA.getInstancia().almacenaEntidad(proyecto);
  }
  catch (HibernateException he)
  {
      correcto=false;
  }
  finally
  {
      return correcto;
  }
}
}
